package com.wenli.graduate2022.wenliGreenShop.config;

import com.wenli.graduate2022.wenliGreenShop.customizeComponents.LoginHandlerIntercept;
import com.wenli.graduate2022.wenliGreenShop.customizeComponents.MyLocaleResolve;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/**
 * 自定义一个WebMvcConfigurer，用于替换springboot的部分默认设置
 *
 * @author HuangHai
 * @date 2021/9/28 16:06
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {

            /**
             * 自定义一个拦截器
             * @param registry
             */
        /*    @Override
            public void addInterceptors(InterceptorRegistry registry) {  //尚且不知要不要加项目路径
                registry.addInterceptor(new LoginHandlerIntercept()).addPathPatterns("/**")
                        .excludePathPatterns("/wenliGreenShop/userIndex", "/wenliGreenShop/userLogin", "/", "/wenliGreenShop/");//指定加入自定义的拦截器处理器，设置拦截的请求路径与忽略的拦截路径
            }*/

            /**
             * 自定义一个视图控制器，也就是控制controller的一些配置
             * @param registry
             */
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addRedirectViewController("/", "/userIndex");//设置默认页面
                registry.addRedirectViewController("/wenliGreenShop/", "/userIndex");//设置默认页面
                registry.setOrder(Ordered.HIGHEST_PRECEDENCE);//设置这个注册器的优先级为最高，他会最先运行
            }

            /**
             * 这个配置用于解决前后端分离的跨域问题，最好前端后端都配置一下，怕出问题,
             * 这个配置可能会与自定义的拦截器处理器（LoginHandlerIntercept）发生冲突，
             * 因为拦截器会先进行拦截，可能到不了跨域的关卡就直接报跨域错误
             * @param registry
             */
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")//允许跨域请求的路径
                //.allowedOrigins("*")//允许哪些源进行跨域，但是由于springboot升级的问题，allowedOrigins要替换成allowedOriginPatterns("*")
                .allowedOriginPatterns("*")        //允许哪些源进行跨域
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")//允许跨域的方法
                .maxAge(3600)//预检间隔时间
                .allowedHeaders("*")//允许哪些头部设置
                .allowCredentials(true);//是否允许发送cookie
            }

            /**
             * 自定义一个异常处理器
             * @param resolvers
             */
            @Override
            public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {

            }
        };
        return webMvcConfigurer;
    }

    @Bean     //用于处理国际化等功能
    public LocaleResolver localeResolver() {
        return new MyLocaleResolve();
    }


}
